home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK1.toast / Development Kits (Disc 1) / Multiprocessing SDK / Multiprocessing / MP.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-17  |  5.9 KB  |  190 lines  |  [TEXT/CWIE]

  1. /*
  2.     MP.h
  3.     Version 1.4 (AKA "Developer Release 27")
  4.  
  5.     Header file for the DayStar/Apple Multiprocessing API
  6.     Friday, April 5, 1996 6:08:58 PM
  7.  
  8.     !! WARNING !!
  9.     NAMES BEGINNING WITH "_MP" ARE NOT YET PART OF THE MP API.
  10.     ANY APPLICATION CODE WHICH REFERENCES THESE NAMES IS LIKELY
  11.     TO REQUIRE CHANGES WITH NEW RELEASES OF THE MP LIBRARY.
  12. */
  13.  
  14. #ifndef MP_h
  15. #define MP_h
  16.  
  17. #include <Types.h>
  18. #include <CodeFragments.h>
  19. #include <stdarg.h>
  20.  
  21.  
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25.  
  26.  
  27. #define MPCopyrightNotice                                    \
  28.   "Copyright © 1995, 1996 DayStar Digital, Inc.\n"            \
  29.   "Portions Copyright © 1995 Apple Computer, Inc.\n"
  30.  
  31. #define    MPLibraryName                    "MPLibrary"
  32. #define MPLibraryCName                    MPLibraryName
  33. #define MPLibraryPName                    "\p" MPLibraryName
  34.  
  35. #define MP_API_Version                    "1.4"
  36. #define MPLibrary_MajorVersion            1
  37. #define MPLibrary_MinorVersion            4
  38. #define MPLibrary_Release                0
  39. #define MPLibrary_DevelopmentRevision    27
  40.  
  41.  
  42. #define MPLibraryIsLoaded()        \
  43.   ((UInt32) _MPIsFullyInitialized != (UInt32) kUnresolvedCFragSymbolAddress \
  44.    && _MPIsFullyInitialized())
  45.  
  46. #define MPLibraryIsCompatible()    \
  47.   _MPLibraryIsCompatible(MP_API_Version, \
  48.                          MPLibrary_MajorVersion, \
  49.                          MPLibrary_MinorVersion, \
  50.                          MPLibrary_Release, \
  51.                          MPLibrary_DevelopmentRevision)
  52.  
  53. typedef SInt32                        Duration;
  54. typedef UInt32                        ByteCount;
  55. typedef UInt32                        MPSemaphoreCount;
  56. typedef UInt32                        MPTaskOptions;
  57.  
  58. typedef OSStatus                            (*TaskProc)(void *parameter);
  59. typedef volatile struct _MPTaskID            *MPTaskID;
  60. typedef volatile struct _MPQueueID            *MPQueueID;
  61. typedef volatile struct _MPSemaphoreID        *MPSemaphoreID;
  62. typedef volatile struct _MPCriticalRegionID    *MPCriticalRegionID;
  63. typedef void   *(*MPRemoteProcedure)(void *parameter);
  64. typedef void  (*_MPPrintfHandler)(MPTaskID taskID, const char *format, va_list args);
  65.  
  66. #define    NullTaskProc                ((TaskProc) 0)
  67. #define    NullMPTaskID                ((MPTaskID) 0)
  68. #define NullMPQueueID                ((MPQueueID) 0)
  69. #define NullMPSemaphoreID            ((MPSemaphoreID) 0)
  70. #define NullMPCriticalRegionID        ((MPCriticalRegionID) 0)
  71. #define NullMPRemoteProcedure        ((MPRemoteProcedure) 0)
  72. #define Null_MPPrintfHandler        ((_MPPrintfHandler) 0)
  73.  
  74.  
  75. #define kMPNoID                        ((void *) 0)
  76.  
  77. #define kMPUseDefaultStackSize        0
  78. #define kMPNormalTaskOptions        0
  79.  
  80. enum {
  81.   kDurationImmediate = 0,
  82.   kDurationForever = 0x7fffffff
  83. };
  84.  
  85.  
  86. enum MPErrorValues {
  87.   kMPFirstError = -29299,
  88.  
  89.   kMPInvalidIDErr                        = kMPFirstError,
  90.   kMPInsufficientResourcesErr,
  91.   kMPTaskAbortedErr,
  92.   kMPTimeoutErr,
  93.   kMPDeletedErr,
  94.  
  95.   kMPAllocationFailed                    = kMPInsufficientResourcesErr,
  96.   kMPInvalidTask                        = kMPInvalidIDErr,
  97.   kMPInvalidQueue                        = kMPInvalidIDErr,
  98.   kMPInvalidSemaphore                    = kMPInvalidIDErr,
  99.   kMPInvalidCriticalRegion                = kMPInvalidIDErr,
  100.   kMPTaskDeleted                        = kMPDeletedErr,
  101.   kMPQueueDeleted                        = kMPDeletedErr,
  102.   kMPSemaphoreDeleted                    = kMPDeletedErr,
  103.   kMPCriticalRegionDeleted                = kMPDeletedErr,
  104.  
  105.   kMPBadEntryPoint,
  106.   kMPUnrecognizedTaskCreationOptions,
  107.   kMPInappropriateStackSize,
  108.   kMPTaskDoesNotOwnCriticalRegion,
  109.   kMPDurationValueNotYetSupported,
  110.   kMPFunctionNotYetImplemented,
  111.   kMPLibraryInternalInconsistencyError,
  112.   kMPTaskSchedulerIsLocked,
  113.  
  114.   kMPFirstUnassignedErrorValue,
  115.  
  116.   kMPLastError                            = -29250
  117. };
  118.  
  119.  
  120.  
  121.  extern OSStatus MPCreateTask(TaskProc            entryPoint,
  122.                void                *parameter,
  123.                ByteCount        stackSize,
  124.                MPQueueID        notifyQueue,
  125.                void             *terminationParameter1,
  126.                void             *terminationParameter2,
  127.                MPTaskOptions    options,
  128.                MPTaskID            *task);
  129.                
  130. extern OSStatus  MPTerminateTask(MPTaskID task, OSStatus terminationStatus);
  131. extern OSStatus MPCreateQueue(MPQueueID *queue);
  132.   
  133. extern OSStatus MPNotifyQueue(MPQueueID    queue,void        *param1, void    *param2, void        *param3);
  134.                 
  135. extern OSStatus MPWaitOnQueue(MPQueueID    queue, void        **param1,void        **param2,void        **param3,Duration    timeout);
  136.                 
  137. extern OSStatus MPDeleteQueue(MPQueueID queue);
  138. extern OSStatus  MPCreateSemaphore(MPSemaphoreCount    maximumValue,  MPSemaphoreCount    initialValue, MPSemaphoreID        *semaphore);
  139. extern OSStatus  MPSignalSemaphore(MPSemaphoreID semaphore);
  140. extern OSStatus  MPWaitOnSemaphore(MPSemaphoreID semaphore, Duration timeout);
  141. extern OSStatus  MPDeleteSemaphore(MPSemaphoreID semaphore);
  142. extern OSStatus  MPCreateCriticalRegion(MPCriticalRegionID *criticalRegion);
  143. extern OSStatus  MPEnterCriticalRegion(MPCriticalRegionID criticalRegion, Duration timeout);
  144. extern OSStatus  MPExitCriticalRegion(MPCriticalRegionID criticalRegion);
  145. extern OSStatus  MPDeleteCriticalRegion(MPCriticalRegionID criticalRegion);
  146.  
  147. extern MPTaskID  MPCurrentTaskID(void);
  148.  
  149. extern UInt32  MPProcessors(void);
  150. extern UInt32  _MPInitializationStatus(void);
  151.  
  152. extern Boolean  _MPIsFullyInitialized(void);
  153. extern Boolean  _MPLibraryIsCompatible(char    *api, UInt32    major, UInt32    minor, UInt32    release, UInt32    revision);
  154.                          
  155. extern Boolean   _MPTaskIsToolboxSafe(MPTaskID task);
  156.  
  157.  
  158. extern LogicalAddress  MPAllocate(ByteCount size);
  159. extern LogicalAddress _MPAllocateSys(ByteCount size);
  160.  
  161. extern void  MPFree(LogicalAddress object);
  162. extern void  MPBlockCopy(LogicalAddress from, LogicalAddress to, ByteCount blockSize);
  163. extern void  MPYield(void);
  164. extern void  MPExit(OSStatus status);
  165. extern void  _MPLibraryVersion(char    **api,
  166.                     UInt32    *major,
  167.                     UInt32    *minor,
  168.                     UInt32    *release,
  169.                     UInt32    *revision);
  170.                     
  171. extern void  _MPInitializePrintf(_MPPrintfHandler pfn);
  172. extern void  _MPPrintf(const char *format, ...);
  173. extern void  _MPDebugStr(StringPtr s);
  174.  
  175. extern void  *_MPRPC(MPRemoteProcedure procedure, void *parameter);
  176.  
  177. extern StringPtr  _MPStatusPString(OSStatus status);
  178.  
  179. extern char  *_MPStatusCString(OSStatus status);
  180.  
  181.  
  182. #define MPCreateBinarySemaphore(semaphore)   MPCreateSemaphore(1, 1, (semaphore))
  183.  
  184.  
  185. #ifdef __cplusplus
  186. }
  187. #endif
  188.  
  189. #endif
  190.